package com.chujian.framework.sync.handler;

import com.chujian.framework.core.IId;
import com.chujian.framework.core.base.BaseService;
import com.chujian.framework.sync.SyncData;

import java.io.Serializable;
import java.lang.reflect.Method;

public interface ISyncMethodHandler {

    /**
     * 支持的方法
     *
     * @return 支持的方法
     */
    String supportMethod();

    /**
     * 构建需要同步的数据
     *
     * @param method
     * @param args
     * @param returnValue
     * @param target
     * @return
     */
    SyncData creSyncData(Method method, Object[] args, Object returnValue, Object target);


    /**
     * 查询
     *
     * @param entity  实体
     * @param service 服务Service
     * @return
     */
    default Object selectOne(Object entity, Object service) {
        if (entity instanceof IId) {
            Serializable id = ((IId) entity).getId();
            if (service instanceof BaseService) {
                BaseService<?> baseService = (BaseService<?>) service;
                // 查询最新的数据
                return baseService.getByIdAndFull(id);
            }
        }
        return null;
    }

}
